﻿#ifndef MODELWIDGET_H
#define MODELWIDGET_H

#include <QWidget>
#include <Qt3DExtras/Qt3DWindow>
#include <Qt3DExtras/QOrbitCameraController>
#include <QVBoxLayout>

#include "modelfileparse.h"

// 模型展示窗口
class ModelWidget
        :public QWidget
{
    Q_OBJECT
public:
    ModelWidget(QWidget* parent=nullptr);


public slots:

    /**
     * @brief parseObjFile 解析模型文件
     * @param objFilePath 模型OBJ文件路径
     * @param mtlFilePath 材料MTL文件路径
     * @return
     */
    void parseModelFile(const QString& objFilePath,const QString& mtlFilePath);



private:

    /**
     * @brief init3DWindow 初始化三维窗口信息，创建Qt3DWindow
     */
    void init3DWindow();

    /**
     * @brief init3DScene 初始化三维场景信息，灯光，相机等
     */
    void init3DScene();

    /**
     * @brief initConnect 初始化信号连接
     */
    void initConnect();


    // QT3D窗口
    Qt3DExtras::Qt3DWindow *m_3dWindow;

    // QT3D窗口嵌入的QWidget
    QWidget *m_3dWidget;

    // 主垂直布局
    QVBoxLayout *m_mainVBoxLayout;

    // 场景根实体
    Qt3DCore::QEntity *m_rootEntity;

    // 相机
    Qt3DRender::QCamera *m_camera;

    // 相机控制器
    Qt3DExtras::QOrbitCameraController *m_camController;

    // 光源
    Qt3DCore::QEntity *m_lightEntity;

    // 模型文件解析器
    ModelFileParse m_modelFileParse;
};

#endif // MODELWIDGET_H
